<?php
/**
 *                  ********************
 *    ************ hirek ADMIN CONTROLLER ************
 *                  ********************
 * 
 * 
 */
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Hirek extends Admin_Controller {

    function __construct() {
        // Call the Model constructor
        parent::__construct();
        // load models
        $this->load->model("hir_model");
        $this->load->model("hir_cimke_model");
    }

    /**
     * 
     * 
     * 
     * 
     *              ************************************
     *              ******** HÍREK      ****************
     *              ************************************
     * 
     * 
     * 
     * 
     * 
     */
    public function index() {
        $this->hir_list();
    }

    public function hir_list() {
        $this->data['title'] = "Összes hír";
        $this->data['dtables'] = array(
            'ajax_source_site_url' => 'admin/hirek/ajax_get_table',
            'table_name' => 'hirek_table',
            'table_fields' => array(
                'hir_id',
                'hir_cim',
                'hir_tipus',
                'hir_szin',
                'hir_szoveg'
            ),
            'edit_site_url' => 'admin/hirek/edit_hir',
            'ajax_delete_site_url' => 'admin/hirek/ajax_delete_hir',
        );

        $this->_load_view('admin/hirek/hir_list_view', $this->data);
    }

    public function new_hir() {
        $this->data['title'] = "Új hír";
        $this->_load_view('admin/hirek/hir_edit_view', $this->data);
    }

    public function edit_hir($id) {
        $this->data['title'] = "Hír szerkesztése";
        // ha nincs id redirectelünk
        if (!isset($id)) {
            $this->session->set_flashdata('error_message', 'A szerkesztéshez id-t kell megadni.');
            redirect('admin/hirek');
        }
        $this->data['hir_data'] = $this->hir_model->get_hir($id);
        $this->_load_view('admin/hirek/hir_edit_view', $this->data);
    }

    public function add_hir() {
        $this->form_validation->set_rules('hir_tipus', '', '');
        $this->form_validation->set_rules('hir_szin', '', '');
        $this->form_validation->set_rules('hir_cim', '', 'trim|required');
        $this->form_validation->set_rules('hir_szoveg', '', '');
        $this->form_validation->set_rules('hir_cimkek', '', '');
        $this->form_validation->set_rules('hir_kep_url', '', 'trim');
        $this->form_validation->set_rules('hir_youtube_id', '', 'trim');
        // set error delimiters
        $this->form_validation->set_error_delimiters('', '');
        if ($this->form_validation->run() == FALSE) {
            $this->new_hir();
            return;
        }
        // átjutunk az ellenőrzésen akkor lementjük az adatokat
        $hir_data = $this->input->post();

        // beletesszük a hir cim slug-ot
        // string helper kell az inkrementáláshoz
        $this->load->helper('string');
        // addig inkrementáljuk, amíg már nem létezik az adatbázisban ilyen slug.
        $hir_data['hir_cim_slug'] = _generate_slug($hir_data['hir_cim']);
        // ha már van ilyen név inkrementálunk
        while ($this->hir_model->get_hir_by_slug($hir_data['hir_cim_slug']) != NULL) {
            $hir_data['hir_cim_slug'] = increment_string($hir_data['hir_cim_slug']);
        }

        // elmentjük
        $this->hir_model->add_hir($hir_data);
        // legközelebb találkozunk, most lista.
        $this->session->set_flashdata('message', 'Az új hir: ' .
                $hir_data["hir_cim"] . ' sikeresen bekerült az adatbázisba.');
        redirect('admin/hirek');
    }

    public function update_hir($id) {
        if (!isset($id)) {
            $this->session->set_flashdata('error_message', 'A szerkesztéshez id-t kell megadni.');
            redirect('admin/hirek');
        }
        $this->form_validation->set_rules('hir_tipus', '', '');
        $this->form_validation->set_rules('hir_szin', '', '');
        $this->form_validation->set_rules('hir_cim', '', 'trim|required');
        $this->form_validation->set_rules('hir_szoveg', '', 'trim');
        $this->form_validation->set_rules('hir_cimkek', '', 'trim');
        $this->form_validation->set_rules('hir_kep_url', '', 'trim');
        $this->form_validation->set_rules('hir_youtube_id', '', '');
        // set error delimiters
        $this->form_validation->set_error_delimiters('', '');
        if ($this->form_validation->run() == FALSE) {
            $this->edit_hir($id);
            return;
        }
        // átjutunk az ellenőrzésen akkor lementjük az adatokat
        $hir_data = $this->input->post();

        // beletesszük a hir cim slug-ot
        // string helper kell az inkrementáláshoz
        $this->load->helper('string');
        // addig inkrementáljuk, amíg már nem létezik az adatbázisban ilyen slug.
        $hir_data['hir_cim_slug'] = _generate_slug($hir_data['hir_cim']);
        // ha már van ilyen név inkrementálunk
        while ($this->hir_model->get_hir_by_slug($hir_data['hir_cim_slug'], $id) != NULL) {
            $hir_data['hir_cim_slug'] = increment_string($hir_data['hir_cim_slug']);
        }

        // beletesszük az id-t
        $hir_data['hir_id'] = $id;

        // elmentjük
        $this->hir_model->update_hir($hir_data);

        // legközelebb találkozunk, most lista.
        $this->session->set_flashdata('message', 'A hir: ' .
                $hir_data["hir_cim"] . ' adatai sikeresen módusultak.');
        
        redirect('admin/hirek');
    }

    /**
     *  hir törlése
     * 
     * @param type $id
     * @return type 
     */
    public function ajax_delete_hir($id) {
        try {
            $this->hir_model->delete($id);
        } catch (Exception $e) {
            echo encode_json($e->getMessage());
            return;
        }
        echo encode_json("successful");
    }

    /**
     * Datatables-hez hirek listázása
     */
    public function ajax_get_table() {
        /**
         * Ami bejön és fontos:
         * iDisplayStart
         * iDisplayLength
         * sSearch
         * sEcho    _ XSS protection
         * 
         * 
         * Ami kimegy:
         * 
         * iTotalRecords
         * iTotalDisplayRecords
         * sEcho
         * aaData
         */
        $this->load->helper('text');
        // elkérjük az összes postolt adatot
        
        $all_post = $this->input->post();

        //var_dump($all_post);
        // megnézzük mennyi column van a táblázatban
        $number_of_columns = $all_post['iColumns'];

        // megnézzük kell-e keresni valamire
        ($all_post['sSearch'] != '') ? $search_like = $all_post['sSearch'] : $search_like = NULL;

        // csinálunk egy listát a megjelítendő változókról
        // azaz adatbázisból az oszlopokról
        $select_from_database = "";
        for ($i = 0; $i < $number_of_columns; $i++) {
            $select_from_database .= $all_post["mDataProp_$i"];
            //a vesszőt az utolsóig hozzáadja, mivel ez felsorolás
            if ($i < $number_of_columns - 1)
                $select_from_database.=", ";
        }

        // SORBARENDEZÉS IMPLEMENTÁLÁSA
        // megszerezzük mi szerint kell sortolnunk
        $sort_by_id = $all_post["iSortCol_0"];
        // így megkapjuk a nevét
        $order_by = $all_post["mDataProp_$sort_by_id"];
        // és most hozzáadjuk az irányt
        $order_dir = $all_post["sSortDir_0"];

        // összeállítjuk a lekérést, amit a modelnek küldünk.
        $hirs_request = array(
            // keresés
            'search_like' => $search_like,
            // kiválasztás
            'select' => $select_from_database,
            // limit&offset
            'limit' => $all_post['iDisplayLength'],
            'offset' => $all_post['iDisplayStart'],
            'order_by' => $order_by,
            'order_dir' => $order_dir
        );

        $hirek = $this->hir_model->get_hirek($hirs_request);

        foreach ($hirek as $hir) {
            $hir->DT_RowId = "hir_id_" . $hir->hir_id;
            // strip tags befora word limiter hits
            $hir->hir_szoveg = word_limiter(strip_tags($hir->hir_szoveg), 10);
            $hir->hir_szin = "<div class=\"$hir->hir_szin tableColor\"></div>";
            switch ($hir->hir_tipus) {
                case 's':
                    $hir->hir_tipus = "1 oszlop";
                    break;
                case 'm':
                    $hir->hir_tipus = "video";
                    break;
                case 'l':
                    $hir->hir_tipus = "2 oszlop";
                    break;
                default:
                    break;
            }
        }

        $data["iTotalRecords"] = $this->hir_model->count();
        $data["iTotalDisplayRecords"] = $data["iTotalRecords"];
        $data["sEcho"] = $all_post["sEcho"];
        $data["aaData"] = $hirek;

        echo encode_json($data);
    }

    /**
     * 
     * 
     * 
     * 
     *              ************************************
     *              ******** HÍR CIMKÉK ****************
     *              ************************************
     * 
     * 
     * 
     * 
     * 
     */

    /**
     *
     * Index Page for admin
     *  Datatable full ajaxos formmal
     *
     * ajax_source_site_url - datatables kéréseire válaszol
     * table_name - a kitöltendő tábla id-je  (html view-ban)
     * table_fields - a html tábla egyes oszlopainak nevei
     * ajax_get_form_site_url - ettől az oldaltól kérhetjük el a form-ot
     *                  ha elküldjük az id-t akkor rekord adatokkal, szerkesztünk
     *                  ha nem küldünk id,t üres formot kapunk
     * ajax_save_record_site_url - ide tudunk ajax-al submittolni, újat id nélkül,
     *                                      meglévőt id-vel.
     * ajax_delete_site_url - az ajaxos törlés címe (paramétersoron kapja meg az id-t)
     */
    public function cimkek() {
        $this->data['title'] = "Hír cimkék";
        // bekonfiguráljuk a datatablest
        $this->data['dtables'] = array(
            'ajax_source_site_url' => 'admin/hirek/ajax_get_cimke_table',
            'table_name' => 'hir_cimke_table',
            'table_fields' => array(
                'cimke_id',
                'cimke_nev'
            ),
            'ajax_get_form_site_url' => 'admin/hirek/ajax_get_hir_cimkek_form',
            'ajax_save_record_site_url' => 'admin/hirek/ajax_save_hir_cimke',
            'ajax_delete_site_url' => 'admin/hirek/ajax_cimke_delete'
        );

        $this->_load_view('admin/hirek/cimkek_view', $this->data);
    }

    /**
     * HTML válaszban ad formot
     *
     * visszaadja a form-ot az ajax editornak
     *
     * ha kap post-ban id-t akkor visszaadja a formot
     * az idnek megfelelő rekorddal
     *
     * ha nem kap post-ban id-t, üres formot ad.
     *
     */
    function ajax_get_hir_cimkek_form() {
        // lekérjük az inputtól a postolt adatot
        $all_post = $this->input->post();
        // most megnézzük kaptunk-e id-t.
        if (isset($all_post['id'])) {
            // van id-nk
            // betöltjük a dolgokat
            $this->data['hir_cimke_data'] = $this->hir_cimke_model->get_hir_cimke($all_post['id']);
        } else {
            // nincs id-nk, üres form, nem is csinálunk semmit
        }
        // betöltjük CSAK a form view-et, mivel több dolgot nem adunk ki
        // ez a HTML válasz az ajax hívásra!
        $this->load->view('admin/hirek/cimkek_ajax_form_view', $this->data);
    }

    /**
     * Elmenti a műfajt
     *
     * ha van id, updatel
     * egyébként új műfaj
     *
     */
    function ajax_save_hir_cimke($id = NULL) {
        // json output type
        $this->output->set_content_type('application/json');
        // lekérjük az inputtól a postolt adatot
        $hir_cimke = $this->input->post();
        $message = '';
        // ha nincs programsáv név akkor failelünk
        if ($hir_cimke['cimke_nev'] == '') {
            $message['error'] = "A cimke neve megadása kötelező!";
            echo encode_json($message);
            return;
        }

        $hir_cimke['cimke_nev_slug'] = _generate_slug($hir_cimke['cimke_nev']);

        // ha van már ilyen műfaj akkor failelünk
        if ($this->hir_cimke_model
                        ->get_hir_cimke_by_slug($hir_cimke['cimke_nev_slug'], $id) != NULL) {
            // van ilyen cimke, hibát jelzünk.
            $message['error'] = "Már van ilyen cimkenév, kérlek válassz másikat.";
            echo encode_json($message);
            return;
        }

        $message['item'] = $hir_cimke;

        if ($id != NULL) {
            // van id, updatelünk
            $hir_cimke['cimke_id'] = $id;
            $this->hir_cimke_model->update_hir_cimke($hir_cimke);
            $message['msg'] = "A cimke: " . $hir_cimke['cimke_nev'] . " mentése megtörtént.";
            //var_dump($this->input->post());
        } else {
            // nincs id, újat mentünk
            $this->hir_cimke_model->add_hir_cimke($hir_cimke);
            $message['msg'] = "Az új cimke: " . $hir_cimke['cimke_nev'] . " mentése megtörtént.";
            // var_dump($this->input->post());
        }
        echo encode_json($message);
    }

    /**
     *
     *
     *  Törlés
     *
     *
     *
     * @param type $id
     */
    public function ajax_cimke_delete($id) {
        // json output type
        $this->output->set_content_type('application/json');
        // delete
        $this->hir_cimke_model->delete($id);
    }

    /**
     * Visszaadja a táblát datatables-nek
     */
    public function ajax_get_cimke_table() {
        /**
         * Ami bejön és fontos:
         * iDisplayStart
         * iDisplayLength
         * sSearch
         * sEcho    _ XSS protection
         *
         *
         * Ami kimegy:
         *
         * iTotalRecords
         * iTotalDisplayRecords
         * sEcho
         * aaData
         */
        // json output type
        $this->output->set_content_type('application/json');
        // elkérjük az összes postolt adatot
        $all_post = $this->input->post();

        //var_dump($all_post);
        // megnézzük mennyi column van a táblázatban
        $number_of_columns = $all_post['iColumns'];

        // megnézzük kell-e keresni valamire
        ($all_post['sSearch'] != '') ? $search_like = $all_post['sSearch'] : $search_like = NULL;

        // csinálunk egy listát a megjelítendő változókról
        // azaz adatbázisból az oszlopokról
        $select_from_database = "";
        for ($i = 0; $i < $number_of_columns; $i++) {
            $select_from_database .= $all_post["mDataProp_$i"];
            //a vesszőt az utolsóig hozzáadja, mivel ez felsorolás
            if ($i < $number_of_columns - 1)
                $select_from_database.=", ";
        }

        // SORBARENDEZÉS IMPLEMENTÁLÁSA
        // megszerezzük mi szerint kell sortolnunk
        $sort_by_id = $all_post["iSortCol_0"];
        // így megkapjuk a nevét
        $order_by = $all_post["mDataProp_$sort_by_id"];
        // és most hozzáadjuk az irányt
        $order_dir = $all_post["sSortDir_0"];

        // összeállítjuk a lekérést, amit a modelnek küldünk.
        $request = array(
            // keresés
            'search_like' => $search_like,
            // kiválasztás
            'select' => $select_from_database,
            // limit&offset
            'limit' => $all_post['iDisplayLength'],
            'offset' => $all_post['iDisplayStart'],
            'order_by' => $order_by,
            'order_dir' => $order_dir
        );

        $hir_cimkek = $this->hir_cimke_model->get_hir_cimkek($request);

        foreach ($hir_cimkek as $hir_cimke) {
            $hir_cimke->DT_RowId = "cimke_id_" . $hir_cimke->cimke_id;
            
        }

        $data["iTotalRecords"] = $this->hir_cimke_model->count();
        $data["iTotalDisplayRecords"] = $data["iTotalRecords"];
        $data["sEcho"] = $all_post["sEcho"];
        $data["aaData"] = $hir_cimkek;

        echo encode_json($data);
    }

    /**
     *
     *
     * Megnézi létezik-e az adatbázisban már ilyen dolog
     *
     *
     */
    public function ajax_exist_in_database() {
        $row_name = $this->input->post('row_name');
        $record_name = $this->input->post('record_name');
        $id = $this->input->post('id');
        // ha nincs reg_id akkor false értéket kapunk, és null-t küldünk.
        if ($id == FALSE)
            $id = NULL;
        // ha nincs még ilyen akkor available, egyébként reserved
        if ($this->hir_cimke_model->is_available("cimke_nev", $record_name, $id)) {
            echo 'available';
        } else {
            echo 'reserved';
        }
        return;
    }

    /**
     * 
     * 
     * VISSZAADJA JSON-BEN A CIMKÉKET,
     * AMIK A BEJÖVŐ KARAKTEREKKEL KEZDŐDNEK
     * (POST-BAN MEGADOTT KARAKTEREKKEL)
     * 
     * 
     */
    public function ajax_get_cimke_by_start() {
        // json output type
        $this->output->set_content_type('application/json');
        $request = $this->input->post('starting_chars');
        // most az egész lesz amiben keresünk
        $starting_chars = $request['term'];
        /* MIVEL A JQUERY AUTOCOMPLETE ALAPBÓL NEM TÁMOGATJA
         * KI LETT SZEDVE A VESSZŐVEL ELVÁLSAZTOTT AUTOCOMPLETE 
        // kiszedem az utolsó begépelt címkét (vesszővel van elválasztva)
        $starting_chars = explode(",", $request['term']);
        
        // array to string (last element of array)
        $starting_chars = end($starting_chars);
        
        // if empty string || space => return
        if(!$starting_chars || $starting_chars == ' '){
            return;
        }
        $starting_chars = trim($starting_chars);
        */
        $data['request'] = $starting_chars;
        $cimkek = $this->hir_cimke_model->get_hir_cimke_by_start($starting_chars);
        // átalakítás ehető formátumra
        $data['cimkek'] = array();
        foreach ($cimkek as $cimke) {
            array_push($data['cimkek'], $cimke->cimke_nev);
        }
        // send response
        echo encode_json($data);
    }

}